package com.abe.libquick.widget.text;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.TextView;

@SuppressWarnings("deprecation")
@SuppressLint({"FloatMath", "AppCompatCustomView"})
public class MultiTextView extends TextView {
	Context context;

	public MultiTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		Layout layout = getLayout();
		if (layout != null) {
			int height = (int) Math.ceil(getMaxLineHeight(this.getText()
					.toString()))
					+ getCompoundPaddingTop()
					+ getCompoundPaddingBottom();
			int width = getMeasuredWidth();
			setMeasuredDimension(width, height);
		}
	}

	private float getMaxLineHeight(String str) {
		float height = 0.0f;
		MarginLayoutParams lp = (MarginLayoutParams) this.getLayoutParams();
		float screenW = ((Activity) context).getWindowManager()
				.getDefaultDisplay().getWidth()
				- lp.leftMargin - lp.rightMargin;
		float paddingLeft = 0;
		float paddingReft = 0;
		float paddingTop = 0;
		float paddingBottom = 0;
		paddingLeft = this.getPaddingLeft();
		paddingReft = this.getPaddingRight();
		paddingTop = this.getPaddingTop();
		paddingBottom = this.getPaddingBottom();
		// 这里具体this.getPaint()要注意使用，要看你的TextView在什么位置，这个是拿TextView父控件的Padding的，为了更准确的算出换行
		int line = (int) Math.ceil((this.getPaint().measureText(str) / (screenW
				- paddingLeft - paddingReft)));
		height = (this.getPaint().getFontMetrics().descent - this.getPaint()
				.getFontMetrics().ascent)
				* line
				+ paddingTop
				+ paddingBottom
				+ lp.topMargin + lp.bottomMargin;
		return height;
	}
}
